#ifndef OCK_MEMORY_BRIDGE_ASYNC_RESULT_H
#define OCK_MEMORY_BRIDGE_ASYNC_RESULT_H
#include <cstdint>
#include <memory>
#include "ock/hmm/mgr/OckHmmErrorCode.h"
namespace ock {
namespace hmm {
class OckHmmAsyncResultBase
{
public:
    virtual ~OckHmmAsyncResultBase() noexcept = default;
};

template <typename _ResultT>
class OckHmmAsyncResult : public OckHmmAsyncResultBase
{
public:
    virtual ~OckHmmAsyncResult() noexcept = default;
    virtual std::shared_ptr<_ResultT> WaitResult(uint32_t timeout = 0) const = 0;
    virtual void Cancel(void) = 0;
};

class OckHmmResultBase
{
public:
    virtual ~OckHmmResultBase() noexcept = default;
    virtual OckHmmErrorCode ErrorCode(void) const = 0;
};

}
}
#endif